热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十一课堂|通过小游戏学习EthereumDApps编程(6)

2019独角兽企业重金招聘Python工程师标准在前面的系列文章中我们了解了ERC20tokens以及ERC721标准,和crypto-collectible。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

image

在前面的系列文章中我们了解了ERC20 tokens以及ERC721标准,和crypto-collectible。这些知识可以让我们可以和其他玩家交易自己的创造的角色。

在最后一篇我们将了解怎么把智能合约发不到ETH网络上。我们会了解一些关于Web3.js库的知识点。

1 客户端和node之间的通信机制

一个客户端向ETH网络发出请求的时候,我们的客户端需要告诉node

  • 我们需要的智能合约的地址

  • 我们需要哪个功能

  • 和那个功能需要的参数

ETH网络的node只能够识别:JSON-RPC语言,对于人类来说不是那么容易阅读。

在实际中,客户端向node发出的请求是这样的

// Yeah... Good luck writing all your function calls this way!// Scroll right ==>{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0xb60e8dd61c5d32be8058bb8eb970870f07233155","to":"0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas":"0x76c0","gasPrice":"0x9184e72a000","value":"0x9184e72a","data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}

而通过Web3.js库来进行通讯的话,就可以把上面的晦涩难懂的部分包装到盒子里面。而表面上,我们可以使用易懂的语言。

我们可以这样写:

CryptoZombies.methods.createRandomZombie("Vitalik Nakamoto ")  .send({ from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", gas: "3000000" })

2 安装Web3.js库

// Using NPMnpm install web3// Using Yarnyarn add web3// Using Bowerbower install web3// ...etc.

你也可以直接下载最小化了的js文件:github(https://github.com/ethereum/web3.js/blob/1.0/dist/web3.min.js)

然后import到你到文件里面。


我们的html文件会是这个样子:


3 设置Web3 Provider

ETH网络上,有很成千上万的node,通过设置Web3 Provider,我们可以设置我们将对哪个特定的node发出请求。当然你需要自己创建一个node,来做provider。

如果说这些特别的设置,会让很多人困惑,当然ETH社区已经为你准备好了一个工具:Infura

Infura

Infura是一个附带有缓存,高速处理读写的node。

Infura is a service that maintains a set of Ethereum nodes with a caching layer for fast reads, which you can access for free through their API. Using Infura as a provider, you can reliably send and receive messages to/from the Ethereum blockchain without needing to set up and maintain your own node.

可以这样设置Infura为你的Web3 Provider

var web3 = new Web3(new Web3.providers.WebsocketProvider("wss://mainnet.infura.io/ws"));

public,private key

区块链上,别人不可能冒名顶替你,是因为别人不知道你的private key。但是一个智能合约在执行的时候,我们需要用户用private key来签名,从而证明这次调用,是我们在调用。我们既然知道private key的重要性,当然不敢轻易的来管理用户的private key了。

所以,在用Infure的功能的基础上,如果想要加上private key的管理的功能的话,Chrome和firefox的extension:Metamask将是一个必备的工具。

Metamask uses Infura's servers under the hood as a web3 provider, just like we did above — but it also gives the user the option to choose their own web3 provider. So by using Metamask's web3 provider, you're giving the user a choice, and it's one less thing you have to worry about in your app.

如果安装了Metamask,也就意味这你装备了Web3.js。

下面这段代码是Metamask提供的,怎么检测是否Metamask已经安装:

window.addEventListener('load', function() {// Checking if Web3 has been injected by the browser (Mist/MetaMask)if (typeof web3 !== 'undefined') {// Use Mist/MetaMask's providerweb3js = new Web3(web3.currentProvider);} else {// Handle the case where the user doesn't have web3\. Probably// show them a message telling them to install Metamask in// order to use our app.} // Now you can start your app & access web3js freely:startApp()})
4 ABI

ABI stands for Application Binary Interface。

代表了智能合约函数的JSON形式。Solidity编辑器会告诉我们的ABI。

5 发布

在编辑,发布了你的智能合约之后,我们需要记下下面的内容:

  • 记下我们智能合约在ETH网络上地地址。比如电子猫的地址:0x06012c8cf97BEaD5deAe237070F9587f8E7A266d

  • 还有上面ABI。

6 初始化智能合约

// Instantiate myContractvar myContract = new web3js.eth.Contract(myABI, myContractAddress);

Web3.js

我们会通过Web3.js提供的两个接口来和Web3.js进行交互:call 和 send call is used for view and pure functions. It only runs on the local node, and won't create a transaction on the blockchain.

还记得:view and pure么?表示这个函数不会对区块链进行写的操作,只会读取,而且完全是免费的。

Web3.js的call用于激活任何view or pure的函数。

我们可以这样激活Web3.js的call

myContract.methods.myMethod(123).call()

send will create a transaction and change data on the blockchain. You'll need to use send for any functions that aren't view or pure.

Web3.js的call用于激活任何 非view or pure的函数。而且需要用户支付费用

和call一样,你可以这样激活

myContract.methods.myMethod(123).send()

拓展阅读:

十一课堂|通过小游戏学习Ethereum DApps编程(1)

十一课堂|通过小游戏学习Ethereum DApps编程(2)

十一课堂|通过小游戏学习Ethereum DApps编程(3)

十一课堂|通过小游戏学习Ethereum DApps编程(4)

十一课堂|通过小游戏学习Ethereum DApps编程(5)

本系列文章作者:HiBlock区块链技术布道群-Amywu

原文发布于简书

加微信baobaotalk_com,加入技术布道群

Blockathon|48小时极客竞赛,区块链马拉松等你挑战(上海)

时间:2018年10月19-21日

地点:(上海黄浦)露香园路1号(近淮海东路)P2

  • 招募50名开发者(识别下图二维码或点击“阅读原文”即可了解详情并报名)

image

北京blockathon回顾:

Blockathon(北京):48小时极客开发,区块松11个现场交付项目创意公开

成都blockathon回顾:

Blockathon2018(成都站)比赛落幕,留给我们这些区块链应用思考


转:https://my.oschina.net/u/3782027/blog/2223522



推荐阅读
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • SvpplyTable: 实现可扩展和可折叠的菜单动画
    SvpplyTable 是一个示例项目,旨在实现类似 Svpply 应用程序中的可扩展和可折叠的菜单动画效果。该项目托管在 GitHub 上,地址为 https://github.com/liuminqian/SvpplyTable。 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
author-avatar
吉之麟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有